#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
using namespace std;
#include <string>
#include <vector>
#include <algorithm>

//bool cmp_lexi(const string& str1, const string& str2)
//{
//    int s1 = 0, s2 = 0;
//    while (s1 < str1.size() && s2 < str2.size())
//    {
//        if (str1[s1] == str2[s2])
//        {
//            s1++;
//            s2++;
//        }
//        else if (str1[s1] < str2[s2])
//        {
//            return true;
//        }
//        else
//        {
//            return false;
//        }
//    }
//    return false;
//}
//bool cmp_leng(const string& str1, const string& str2)
//{
//    return str1.size() < str2.size();
//}
//int main()
//{
//    int n = 0;
//    cin >> n;
//    cout << n;
//    vector<string> strs;
//    strs.reserve(n);
//
//    for (int i = 0; i < n; i++)
//    {
//        //strs[i].reserve(100);
//        cin >> strs[i];
//    }
//    for (auto& v : strs)
//    {
//        cout << v << endl;
//    }
//    // vector<string> cmpstr(strs);
//    // sort(cmpstr.begin(), cmpstr.end(),cmp_lexi);
//    // for(auto& v:cmpstr)
//    // {
//    //     cout << v << endl;
//    // }
//    return 0;
//}

//class Count
//{
//public:
//    Count()
//    {
//        _n++;
//    }
//    static int _n;
//};
//int  Count::_n = 0;
//
//class UnusualAdd
//{
//public:
//    int addAB(int A, int B)
//    {
//        // write code here
//        Count* pa = new Count[A];
//        Count* pb = new Count[B];
//    }
//};

//class A
//{
//public:
//    A(int n = 0, int m = 0)
//        :_n(n), _m(m), _count(0)
//    {}
//    void fun(int n = 0, int m = 0)
//    {
//        if (n < _n)
//            fun(n + 1, m);
//        if (m < _m)
//            fun(n, m + 1);
//
//        if (n == _n && m == _m)
//            _count++;
//        else
//            return;
//    }
//    int getcount()
//    {
//        return _count;
//    }
//private:
//    int  _count;
//    int _n;
//    int _m;
//};
//int main()
//{
//    int n, m;
//    cin >> n >> m;
//    A a(n,m);
//    a.fun();
//    cout << a.getcount();
//    return 0;
//}

//class A 
//{
//public:
//	A(const char* s) { cout << s << endl; }
//	~A() {}
//};
//
//class B :virtual public A
//{
//public:
//	B(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
//};
//
//class C :virtual public A
//{
//public:
//	C(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
//};
//
//class D :public B, public C
//{
//public:
//	D(const char* s1, const char* s2, const char* s3, const char* s4) :B(s1, s2), C(s1, s3), A(s1)
//	{
//		cout << s4 << endl;
//	}
//};
//int main() 
//{
//	D* p = new D("class A", "class B", "class C", "class D");
//	delete p;
//	return 0;
//}

//class A
//{
//public:
//	virtual void func(int val = 1) { std::cout << "A->" << val << std::endl; }
//	virtual void test() { func(); }
//};
//
//class B : public A
//{
//public:
//	void func(int val = 0) { std::cout << "B->" << val << std::endl; }
//};
//
//int main(int argc, char* argv[])
//{
//	B* p = new B;
//	p->test();
//	return 0;
//}


#include <iostream>
using namespace std;

bool isprime(int x)
{
    int i = 2;
    while (i < x)
    {
        if (x % i == 0)
            return false;
        i++;
    }
    return true;
}

int main()
{
    int n = 0;
    cin >> n;

    int a = n / 2, b = n / 2 + 1;
    int k = n;
    int aa = a, bb = b;
    while (a >= 0 && b <= n)
    {
        if (isprime(a) && isprime(b))
        {
            if (k > b - a)
            {
                k = b - a;
                aa = a, bb = b;
            }
        }
        a--, b++;
    }

    cout << aa << endl << bb << endl;
    return 0;
}